作業目的:檢視近期成立公司與解散公司的數量與資本總額, 來驗證台灣是否在投資擴張或緊縮
In [445]:
import pandas as pd
#讀取CSV 資料來源開放政府 公司設立登記清冊(201610) http://data.gov.tw/node/6047
#讀取CSV
df1 = pd.read_csv("公司設立登記清冊201610.csv",encoding="utf8")
df1[:5]
Out[445]:
In [446]:
# 公司解散登記清冊(201610) http://data.gov.tw/node/6049
df2 = pd.read_csv("公司解散登記清冊201610.csv",encoding="utf8")
df2[:5]
Out[446]:
資料預處理(清理、轉換、JOIN):
In [447]:
#清理NaN, 將上述設立公司csv檔中未有代表人,資本額的做清除動作
df1 = df1[df1['代表人'].notnull()]
df1 = df1[df1['資本額'].notnull()]
del df1['代表人'] #移除代表人欄位
df1[:5]
Out[447]:
In [448]:
#解散公司資料多數未列上代表人, 儘清除資本額
df2 = df2[df2['資本額'].notnull()]
del df2['代表人']
df2[:5]
Out[448]:
資料預處理:轉換,將公司所在地&資本額做分組所在地取出前面的縣市資訊取出做後續分佈判讀
In [449]:
#先將DataFrame取出所在地、資本額做後續分群使用
df1_loc=df1['公司所在地'].map(lambda x: str(x)[0:3])
#新增欄到設立公司的dataframe中
df1['所在地']=df1_loc
df1[:5]
Out[449]:
In [450]:
df2_loc=df2['公司所在地'].map(lambda x: str(x)[0:3]) #將所在地新增放入dataframe
df2['所在地']=df2_loc
df2[:5]
Out[450]:
In [451]:
df2.corr()
Out[451]:
In [452]:
#先將DataFrame取出資本額做後續統計使用
df1_cap=df1['資本額']
df1_cap[:5]
Out[452]:
In [453]:
df2_cap=df2['資本額'] #解散公司的資本額
df2_cap[:5]
Out[453]:
投資活動在資本擴張或是緊縮? (設立公司資本額 - 解散公司資本額 )
In [454]:
sum_row1=df1[["資本額"]].sum() #設立公司總資本額
sum_row2=df2[["資本額"]].sum() #解散公司總資本額
x = sum_row1-sum_row2 #設立公司的總資本額 - 解散公司的總資本額 (正為投資擴張, 負為投資緊縮)
x
Out[454]:
透過JOIN: 檢查df1, df2,看有無同時解散又成立公司的條件存在,以避免來源資料有重複key-in
In [455]:
df3 = pd.merge(df1,df2,left_on='統一編號',right_on='統一編號',how='inner')
df3[:5]
Out[455]:
使⽤樞紐分析表來察看哪些地方有較多的公司設立活動
In [476]:
#新增資料年月到dataframe
df1['年月']=df1['核准設立日期'].map(lambda x: str(x)[0:5])
#利用Pivot Table來檢視看各縣市設立公司的資本總額
df1_pivot = df1.pivot_table(values='資本額',index=['年月'],columns='所在地',aggfunc='sum')
df1_pivot.T #存在df1_pivot並轉置pivot table以便閱讀
df1_sorted = df1_pivot.T.sort_values(['10510'],ascending=False) #排序從投資最多的城市到投資最低的
df1_sorted[:5]
Out[476]:
In [477]:
df2['年月']=df1['核准設立日期'].map(lambda x: str(x)[0:5])
#利用Pivot Table來檢視看各縣市解散公司的資本總額
df2_pivot=df2.pivot_table(values='資本額',index=['年月'],columns='所在地',aggfunc='sum')
df2_sorted = df2_pivot.T.sort_values(['10510'],ascending=False) #排序從投資最多的城市到投資最低的
df2_sorted[:5]
Out[477]:
資料分析方法擇二: 統計分析、相關性分析 (統計分析、相關性分析、購物籃分析、時間序列分析、主次因素分析)
In [458]:
df1_cap.describe() #描述性統計描述設立公司現況
Out[458]:
In [459]:
df2_cap.describe() #描述性統計描述解散公司的資本額
Out[459]:
In [460]:
df1_cap = df1_cap.rename(columns = {'資本額','設立公司資本額'})
df2_cap = df2_cap.rename(columns = {'資本額','解散公司資本額'})
In [461]:
result = pd.concat([df1_cap, df2_cap], axis=1) #左側為設立公司資本額、右側為解散公司資本額
result[:5]
Out[461]:
In [462]:
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')
print (df1_cap.max(),df1_cap.min())
r = plt.boxplot(df1_cap, showfliers=False) #透過箱型圖來檢視設立公司資本額分佈
plt.show()
In [463]:
df1.corr() #相關性分析來看設立公司資料,檢視統一編號有無跟什麼有相關?
Out[463]:
In [464]:
df2.corr() #相關性分析來看解散公司資料
Out[464]:
In [465]:
plt.rcParams['axes.unicode_minus']=False
df1.plot(kind='scatter',title='ID v.s. #',figsize=(6,4),x='統一編號',y='序號',marker='+')
Out[465]:
In [466]:
print (df2_cap.max(),df2_cap.min())
plt.boxplot(df2_cap, showfliers=False) #透過箱型圖來檢視解散公司資本額分佈
plt.show()
視覺化擇二: Matplotlib做圖_直方圖、折線圖
In [467]:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.style.use('ggplot')
#pandas作圖不使用plt.show(),若要顯示在Jupyter Notebook上,需先執行以下程式碼:(%是在ipython shell中執行command line的意思)
%matplotlib inline
plt.rcParams['font.family']='Simhei' #顯示中文
#對設立公司的資本額做分群, 台灣徵信對於中小型企業有3000萬為一個徵信門檻,經濟部則是製造業、營造業、礦業及土石採取業實收資本額在新臺幣八千萬元以下
bins = [0,300000,8000000,10000000]
pd.cut(df1['資本額'],bins, right=False)
labels = ['C','B','A']
df1['資本規模'] = pd.cut(df1['資本額'],bins, right=False, labels=labels)
df1[:5]
Out[467]:
In [468]:
#利用Pivot Table來檢視資本規模
df1_scale=df1.pivot_table(values='資本額',index=['年月'],columns='資本規模',aggfunc='sum')
df1_scale
Out[468]:
In [469]:
df1_counts = df1.groupby('資本規模').size() #計數總共有幾間設立公司,分屬A(大),B(中),C(小)企業
df1_counts
Out[469]:
Matplotlib 多圖合一 , 將大型企業、中型企業、小型企業總額與個數同時做圖. 目的在了解台灣設立公司中,中小型企業與大型企業在數量上與貢獻的總資本額的差異
In [470]:
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.figure(figsize=(6,6))
x = [1,2,3] #3表示大型; 2表中型; 1表小型企業
y1 = [81536556,190705000,16800000]
y2 = [673,2560,25]
ax1 = plt.subplot(211) #2x1的第1張圖
plt.plot(x,y1,'-')
plt.setp(ax1.get_xticklabels(), visible=False) #不顯示x軸ticks
plt.subplot(212,sharex=ax1) #2x1的第2張圖
plt.bar(x,y2,align='center')
plt.show()
In [471]:
#同樣對解散公司的資本額做分群與做圖
bins_dismiss = [0,300000,8000000,10000000]
pd.cut(df2['資本額'],bins, right=False)
labels = ['C','B','A']
df2['資本規模'] = pd.cut(df2['資本額'],bins, right=False, labels=labels)
df2[:5]
Out[471]:
In [472]:
#利用Pivot Table來檢視資本規模
df2_scale=df2.pivot_table(values='資本額',index=['年月'],columns='資本規模',aggfunc='sum')
df2_scale
Out[472]:
In [473]:
df2_counts = df2.groupby('資本規模').size() #計數總共有幾間設立公司,分屬A(大),B(中),C(小)企業
df2_counts
Out[473]:
In [474]:
plt.figure(figsize=(6,6))
x = [1,2,3] #3表示大型; 2表中型; 1表小型企業
y1 = [21418200,2342356819,175590120]
y2 = [166,1209,25]
ax1 = plt.subplot(211) #2x1的第1張圖
plt.plot(x,y1,'-')
plt.setp(ax1.get_xticklabels(), visible=False) #不顯示x軸ticks
plt.subplot(212,sharex=ax1) #2x1的第2張圖
plt.bar(x,y2,align='center')
plt.show()
基礎機器學習擇一:(線性回歸、Logistic迴歸與評估、決策分類樹與評估、K-means分群與視覺化)